/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fr.sorbonne.inf5.yams.model.combinaison;

import fr.sorbonne.inf5.yams.exceptions.DeNotRunException;
import fr.sorbonne.inf5.yams.model.De;
import fr.sorbonne.inf5.yams.model.De;
import fr.sorbonne.inf5.yams.model.InterfaceFace;
import fr.sorbonne.inf5.yams.model.InterfaceFace;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 *
 * @author Oukherfellah Riad
 * @author Dubos Romain
 */
public class CombinaisonUtilitaire {


    /**
     * Récupère les dés passés en paramètre et compte le nombre d'occurence de chaque face
     * le résultat de ce traitement est renvoyé dans une map qui associe Face, Integer
     * @param listeDe la liste des dés qui contiennent les faces
     * @return une map qui associe une Face à son nombre d'occurence
     * @throws DeNotRunException si un des dés n'a pas été lancé et ne possède pas de faceCourante
     */
    public static Map<InterfaceFace, Integer> compteOccurenceDe(List<De> listeDe) throws DeNotRunException{
        List<InterfaceFace> listeFace = new ArrayList<InterfaceFace>();
        for(int i=0; i<listeDe.size(); i++){
            listeFace.add(listeDe.get(i).getFaceCourante());
        }
        return compteOccurenceFace(listeFace);
    }

    /**
     * Même action que compteOccurenceDe(List<De> listeDe) en recevant une liste
     * de face
     * @param listeFace qui contient une liste de face à compter
     * @return une map qui associe une Face à son nombre d'occurence
     */

    public static Map<InterfaceFace, Integer> compteOccurenceFace(List<InterfaceFace> listeFace){
        Map<InterfaceFace, Integer> returnMap = new HashMap<InterfaceFace, Integer>();
        int nbOccurence;
        for(int i=0; i<listeFace.size(); i++){
            if(!returnMap.containsKey(listeFace.get(i))){
                nbOccurence = 1;
            }else{
                nbOccurence = returnMap.get(listeFace.get(i));
                ++nbOccurence;
            }
            returnMap.put(listeFace.get(i), nbOccurence);
        }
        return returnMap;
    }

}
